package com.example.xiaomengai.assistant;

import dev.langchain4j.service.MemoryId;
import dev.langchain4j.service.SystemMessage;
import dev.langchain4j.service.UserMessage;
import dev.langchain4j.service.spring.AiService;
import dev.langchain4j.service.spring.AiServiceWiringMode;
import reactor.core.publisher.Flux;

/**
 * AI代理服务接口，定义了基于流式大模型的对话交互能力
 * 使用Spring框架进行依赖注入和组件管理
 */
@AiService(
        wiringMode = AiServiceWiringMode.EXPLICIT, // 指定显式装配模式，需手动配置所有依赖项
        streamingChatModel = "openAiStreamingChatModel", // 引用预配置的流式对话模型Bean
        chatMemoryProvider = "chatMemoryProvider", // 引用对话记忆存储服务Bean
        tools = "agentTools" // 引用预注册的工具集Bean
)
public interface Agent {
    /**
     * 流式对话处理方法
     * @param memoryId 会话唯一标识符（通过@MemoryId注解绑定）
     * @param message 用户输入内容（通过@UserMessage注解绑定）
     * @return 响应式流式输出（Flux<T>适用于背压控制）
     */
    @SystemMessage(fromResource = "prompt.txt") // 从classpath加载系统提示模板文件
    Flux<String> chat(@MemoryId String memoryId, @UserMessage String message);
}